package auth

import (
	"apiGateWay/internal/database"
	"apiGateWay/internal/model"
	"apiGateWay/internal/repository"
	"apiGateWay/pkg/logger"
	"errors"
	"time"

	"golang.org/x/crypto/bcrypt"
)

var userRepo repository.UserRepository

// InitUserRepository 初始化用户仓库
func InitUserRepository() {
	if database.DB != nil {
		userRepo = repository.NewUserRepository(database.DB)
	}
}

// VerifyUser 验证用户
func VerifyUser(username, password string) (*model.User, error) {
	if userRepo == nil {
		return nil, errors.New("用户仓库未初始化")
	}

	user, err := userRepo.GetByUsername(username)
	if err != nil {
		return nil, err
	}

	if !user.IsActive {
		return nil, errors.New("用户已被禁用")
	}

	err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
	if err != nil {
		return nil, errors.New("密码错误")
	}

	return user, nil
}

// UpdateLastLogin 更新最后登录时间
func UpdateLastLogin(userID uint) {
	if userRepo == nil {
		return
	}
	
	user, err := userRepo.GetByID(userID)
	if err != nil {
		logger.Errorf("获取用户失败: %v", err)
		return
	}
	
	// 更新最后登录时间
	now := time.Now()
	user.LastLoginAt = &now
	if err := userRepo.Update(user); err != nil {
		logger.Errorf("更新用户最后登录时间失败: %v", err)
	}
}

